package in.lib.adapter; import in.lib.adapter.base.RobinAdapter; import in.lib.utils.Dimension; import in.model.SimpleUser; import in.model.base.NetObject; import in.rob.client.R; import java.util.ArrayList; import java.util.List; import android.content.Context; import android.view.View; import android.view.ViewGroup; import android.widget.Filter; import android.widget.Filterable; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.TextView; import com.nostra13.universalimageloader.core.DisplayImageOptions; import com.nostra13.universalimageloader.core.ImageLoader; public class AutoCompleteAdapter extends RobinAdapter implements Filterable { private final DisplayImageOptions options; private final Dimension mDimension; private List<NetObject> originalItems; private String typedConstraint = ""; private class ViewHolder { public ImageView avatar; public TextView username, mentionName; } public AutoCompleteAdapter(Context context, List<NetObject> items) { super(context, items); originalItems = new ArrayList<NetObject>(items); options = new DisplayImageOptions.Builder().showImageForEmptyUri(R.drawable.default_avatar).showStubImage(R.drawable.default_avatar).cacheInMemory().build(); mDimension = new Dimension(context); } @Override public void setItems(List items) { super.setItems(items); originalItems = new ArrayList<NetObject>(items); } @Override public View getView(int position, View convertView, ViewGroup parent) { ViewHolder holder; NetObject item = getItem(position); if (convertView == null) { convertView = getLayoutInflater().inflate(R.layout.auto_suggest_list_item, null); holder = new ViewHolder(); holder.avatar = (ImageView)convertView.findViewById(R.id.avatar); holder.username = (TextView)convertView.findViewById(R.id.username); holder.mentionName = (TextView)convertView.findViewById(R.id.mention_name); convertView.setTag(R.id.TAG_VIEW_HOLDER, holder); } holder = (ViewHolder)convertView.getTag(R.id.TAG_VIEW_HOLDER); if (item instanceof SimpleUser) { holder.username.setText(((SimpleUser)item).getUserName()); holder.mentionName.setText("@" + ((SimpleUser)item).getMentionName()); holder.mentionName.setVisibility(View.VISIBLE); holder.avatar.setLayoutParams(new LinearLayout.LayoutParams(mDimension.densityPixel(50), mDimension.densityPixel(50))); holder.avatar.setVisibility(View.VISIBLE); ImageLoader.getInstance().displayImage(((SimpleUser)item).getAvatarUrl(), holder.avatar, options); } else { holder.username.setText(item.getFilterTag()); holder.username.setPadding(0, 10, 0, 10); holder.mentionName.setVisibility(View.GONE); holder.avatar.setVisibility(View.GONE); } return convertView; } @Override public Filter getFilter() { Filter myFilter = new Filter() { @Override protected FilterResults performFiltering(CharSequence constraint) { FilterResults filterResults = new FilterResults(); if (constraint != null) { typedConstraint = constraint.toString(); List<NetObject> items = new ArrayList<NetObject>(); for (NetObject item : originalItems) { if (item instanceof SimpleUser) { if (("@" + ((SimpleUser)item).getMentionName().toLowerCase()).startsWith(constraint.toString().toLowerCase())) { items.add(item); } } else { if (item.getFilterTag().toString().toLowerCase().startsWith(constraint.toString().toLowerCase())) { items.add(item); } } } // Now assign the values and count to the FilterResults // object filterResults.values = items; filterResults.count = items.size(); } return filterResults; } @Override protected void publishResults(CharSequence contraint, FilterResults results) { if (results != null && results.count > 0) { clear(); addItems((List<NetObject>)results.values); notifyDataSetChanged(); } } }; return myFilter; } }